package me.itsoo.artemis.framework.core.util;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.util.Collection;
import java.util.Map;

/**
 * Assert
 *
 * @author zxy
 * @version 0.0.1
 * @since 2023/5/11
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Assert {

    /**
     * 为真
     *
     * @param expression boolean
     * @param errMsg     String
     */
    public static void isTrue(boolean expression, String errMsg) {
        if (!expression) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为假
     *
     * @param expression boolean
     * @param errMsg     String
     */
    public static void isFalse(boolean expression, String errMsg) {
        if (expression) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为空
     *
     * @param object Object
     * @param errMsg String
     */
    public static void isNull(Object object, String errMsg) {
        if (object != null) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 不为空
     *
     * @param object Object
     * @param errMsg String
     */
    public static void notNull(Object object, String errMsg) {
        if (object == null) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为空白字符串
     *
     * @param text   String
     * @param errMsg String
     */
    public static void isBlank(String text, String errMsg) {
        if (StringUtils.isNotBlank(text)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 不为空白字符串
     *
     * @param text   String
     * @param errMsg String
     */
    public static void isNotBlank(String text, String errMsg) {
        if (StringUtils.isBlank(text)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为给定的类型
     *
     * @param object Object
     * @param clazz  Class
     * @param errMsg String
     */
    public static void isTypeOf(Object object, Class<?> clazz, String errMsg) {
        if (!clazz.isInstance(object)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 不为给定的类型
     *
     * @param object Object
     * @param clazz  Class
     * @param errMsg String
     */
    public static void isNotTypeOf(Object object, Class<?> clazz, String errMsg) {
        if (clazz.isInstance(object)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为空字符串
     *
     * @param text   String
     * @param errMsg String
     */
    public static void isEmpty(String text, String errMsg) {
        if (StringUtils.isNotEmpty(text)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为空数组
     *
     * @param array  Object[]
     * @param errMsg String
     */
    public static void isEmpty(Object[] array, String errMsg) {
        if (ArrayUtils.isNotEmpty(array)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为空集合
     *
     * @param coll   Collection
     * @param errMsg String
     */
    public static void isEmpty(Collection<?> coll, String errMsg) {
        if (CollectionUtils.isNotEmpty(coll)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 为空集合
     *
     * @param map    Map
     * @param errMsg String
     */
    public static void isEmpty(Map<?, ?> map, String errMsg) {
        if (CollectionUtils.isNotEmpty(map)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 不为空字符串
     *
     * @param text   String
     * @param errMsg String
     */
    public static void isNotEmpty(String text, String errMsg) {
        if (StringUtils.isEmpty(text)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 不为空数组
     *
     * @param array  Object[]
     * @param errMsg String
     */
    public static void isNotEmpty(Object[] array, String errMsg) {
        if (ArrayUtils.isEmpty(array)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 不为空集合
     *
     * @param coll   Collection
     * @param errMsg String
     */
    public static void isNotEmpty(Collection<?> coll, String errMsg) {
        if (CollectionUtils.isEmpty(coll)) {
            throw new IllegalArgumentException(errMsg);
        }
    }

    /**
     * 不为空集合
     *
     * @param map    Map
     * @param errMsg String
     */
    public static void isNotEmpty(Map<?, ?> map, String errMsg) {
        if (CollectionUtils.isEmpty(map)) {
            throw new IllegalArgumentException(errMsg);
        }
    }
}
